/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Clientes;

/**
 *
 * @author humberto
 */

import Utilidades.imagenUtils;
import Utilidades.resaltadores;
import Utilidades.utils;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;


/**
 *
 * @author alrojas
 */
public final class guiAgregarCliente extends JFrame
{

    private static guiAgregarCliente identidad;
    private static guiAgregarCliente instancia=null;
    
    private GridBagLayout layout;

    private JLabel lDni;

    private JLabel lPnombre;
    private JLabel lSnombre;

    private JLabel lPapellido;
    private JLabel lSapellido;

    private JLabel lDireccion;

    private JLabel lTelefono;
    private JLabel lZonaParcela;
    private JLabel lNumParcela;
    private JLabel lHabitParcela;
    
    private JLabel lCelular;

    private JButton bFoto;
    
    private ImageIcon imagen;
    private boolean cambioImagen;
    
    private JTextField tDni;

    private JTextField tPnombre;
    private JTextField tSnombre;

    private JTextField tPapellido;
    private JTextField tSapellido;
    
    private JTextField tDireccion;
    private JTextField tZonaParcela;
    private JTextField tNumParcela;
    private JTextField tHabitParcela; 
    
    private JTextField tTelefono;
    private JTextField tCelular;
      
    private JButton bAceptar;
    private JButton bCancelar;
    

    private guiPrincipalClientes padre;
    private cCliente cliente;
    
    private JFileChooser selector;

    private guiAgregarCliente(guiPrincipalClientes padre)
    {
       // super("Agregar Nuevo Objeto",false,true,true,true);
        identidad=this;
        this.padre=padre;
        this.cambioImagen = false;
        
        this.setTitle("Agregue datos del nuevo Cliente");
        layout = new GridBagLayout();
        this.setLayout(layout);
            
        inicializarComponentes();
        agregarComponentes();
        
        this.pack();
        this.setLocationRelativeTo(null);
        this.setVisible(true);
        agregarListeners();
        this.tDni.requestFocus();      

    }

    public static guiAgregarCliente obtenerInstancia(guiPrincipalClientes padre){
        
        if(instancia==null){
            instancia=new guiAgregarCliente(padre);
            utils.ocultarVentana(padre);
            return instancia;
        }
        utils.mostrarVentana(identidad);
        utils.ocultarVentana(padre);
        return instancia;

    }

    public void inicializarComponentes()
    {
        java.awt.Font fuente =  new java.awt.Font("Arial", 1, 17);
        
        lDni = new JLabel("DNI:");
        lDni.setFont(fuente);
        
        lPnombre = new JLabel("Pr. Nombre");
        lPnombre.setFont(fuente);
       
        lSnombre = new JLabel("Sg. Nombre");
        lSnombre.setFont(fuente);
        
        lPapellido = new JLabel("Pr. Apellido");
        lPapellido.setFont(fuente);
        
        lSapellido = new JLabel("Sg. Apellido");
        lSapellido.setFont(fuente);
        
        
        lDireccion = new JLabel("Dirección:");
        lDireccion.setFont(fuente);
        
        lZonaParcela = new JLabel("Parcela-Zona:");
        lZonaParcela.setFont(fuente);

        lNumParcela = new JLabel("Parcela-Número:");
        lNumParcela.setFont(fuente);
        
        lHabitParcela = new JLabel("Parcela-Habitante:");
        lHabitParcela.setFont(fuente);

        lTelefono = new JLabel("Tf. Fijo:");
        lTelefono.setFont(fuente);
        
        lCelular = new JLabel("Celular:");
        lCelular.setFont(fuente);
        
        imagen = new ImageIcon("./fotosUsuarios/addUser.png");
        
        bFoto=new JButton(imagen);
        
        fuente =  new java.awt.Font("Arial", 0, 15);
        
        tDni = new JTextField(12);
        tDni.setFont(fuente);
        
        tPnombre = new JTextField(12);
        tPnombre.setFont(fuente);
        
        tSnombre = new JTextField(12);
        tSnombre.setFont(fuente);
        
        tPapellido = new JTextField(12);
        tPapellido.setFont(fuente);
        
        tSapellido= new JTextField(12);
        tSapellido.setFont(fuente);
        
        tDireccion= new JTextField(12);
        tDireccion.setFont(fuente);
        
        tZonaParcela= new JTextField(12);
        tZonaParcela.setFont(fuente);
        
        tNumParcela= new JTextField(12);
        tNumParcela.setFont(fuente);
        
        tHabitParcela= new JTextField(12);
        tHabitParcela.setFont(fuente);
        
        tTelefono= new JTextField(12);
        tTelefono.setFont(fuente);
        
        tCelular= new JTextField(12);
        tCelular.setFont(fuente);
        

        bAceptar = new JButton("Agregar!", new ImageIcon("figuras/add32.png"));
        bAceptar.setHorizontalTextPosition(SwingConstants.RIGHT);
        bAceptar.setVerticalTextPosition(SwingConstants.CENTER) ;
        bAceptar.setVerticalAlignment(SwingConstants.CENTER); 
        
        bCancelar = new JButton("Cancelar",new ImageIcon("figuras/delete32.png"));
        bCancelar.setHorizontalTextPosition(SwingConstants.RIGHT);
        bCancelar.setVerticalTextPosition(SwingConstants.CENTER) ;
        bCancelar.setVerticalAlignment(SwingConstants.CENTER);
            
       
        
        selector = new JFileChooser();

    }

    public void agregarComponentes()
    {
        GridBagConstraints restricciones = new GridBagConstraints();


        restricciones.insets=new Insets(3,0,2,20);
        restricciones.anchor = GridBagConstraints.WEST;

        //DNI
        restricciones.gridx = 2;
        restricciones.gridy = 0;
        this.add(lDni,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 0;
        this.add(tDni,restricciones);
        //Primer Nombre
        restricciones.gridx = 2;
        restricciones.gridy = 1;
        this.add(lPnombre,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 1;
        this.add(tPnombre,restricciones);
        //Segundo Nombre
        restricciones.gridx = 2;
        restricciones.gridy = 2;
        this.add(lSnombre,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 2;
        this.add(tSnombre,restricciones);
        //Primer Apellido
        restricciones.gridx = 2;
        restricciones.gridy = 3;
        this.add(lPapellido,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 3;
        this.add(tPapellido,restricciones);
        //Segundo Apellido
        restricciones.gridx = 2;
        restricciones.gridy = 4;
        this.add(lSapellido,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 4;
        this.add(tSapellido,restricciones);
        //Dirección
        restricciones.gridx = 2;
        restricciones.gridy = 5;
        this.add(lDireccion,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 5;
        this.add(tDireccion,restricciones);
        //Zona de Parcela
        restricciones.gridx = 2;
        restricciones.gridy = 6;
        this.add(lZonaParcela,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 6;
        this.add(tZonaParcela,restricciones);
        //Numero de parcela
        restricciones.gridx = 2;
        restricciones.gridy = 7;
        this.add(lNumParcela,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 7;
        this.add(tNumParcela,restricciones);
        //Habitante de Parcela
        restricciones.gridx = 2;
        restricciones.gridy = 8;
        this.add(lHabitParcela,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 8;
        this.add(tHabitParcela,restricciones);
        //Teléfono Fijo
        restricciones.gridx = 2;
        restricciones.gridy = 9;
        this.add(lTelefono,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 9;
        this.add(tTelefono,restricciones);
        //Celular
        restricciones.gridx = 2;
        restricciones.gridy = 10;
        restricciones.gridheight=2;
        restricciones.insets=new Insets(3,0,15,20);
        this.add(lCelular,restricciones);
        restricciones.gridx = 3;
        restricciones.gridy = 10;
        this.add(tCelular,restricciones);
        
        restricciones.gridx = 0;
        restricciones.gridy = 0;
        restricciones.insets=new Insets(2,20,0,20);
        restricciones.gridheight=9;restricciones.gridwidth=2;
        this.add(bFoto,restricciones);
        
        restricciones.gridx = 0;
        restricciones.gridy = 9;
        restricciones.gridheight=3;restricciones.gridwidth=1;
        restricciones.insets=new Insets(-15,27,10,0);
        this.add(bAceptar,restricciones);

        restricciones.gridx = 1;
        restricciones.gridy = 9;
        this.add(bCancelar,restricciones);
        

        


    }
    
     public boolean revisarCampos(){
     
         boolean flag = true ;
         
         //PARA EL DNI
      
         if(tDni.getText().length()!=8){
             JOptionPane.showMessageDialog(null, "DNI debe tener 8 Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                          resaltadores.resaltadorJtextfield(tDni);tDni.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarInteger(tDni.getText())){
             JOptionPane.showMessageDialog(null, "DNI no debe contener Letras",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tDni);tDni.requestFocus();
             flag = false; return flag;
         }
         
         
         //PARA EL PRIMER NOMBRE

         
         else if(utils.verificarEspacioVacio(tPnombre.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Primer Nombre",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPnombre);tPnombre.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarString(tPnombre.getText())){
             JOptionPane.showMessageDialog(null, "Primer Nombre no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPnombre);tPnombre.requestFocus();
             flag = false; return flag;
         }
         
        
         //PARA EL SEGUNDO NOMBRE

         
         else if((!utils.verificarString(tSnombre.getText()))&&(!tSnombre.getText().isEmpty())){
             JOptionPane.showMessageDialog(null, "Segundo Nombre no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tSnombre);tSnombre.requestFocus();
             flag = false; return flag;
         }
         
         //PARA EL PRIMER APELLIDO 

         
         else if(utils.verificarEspacioVacio(tPapellido.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Primer Apellido",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPapellido);tPapellido.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarString(tPapellido.getText())){
             JOptionPane.showMessageDialog(null, "Primer Apellido no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tPapellido);tPapellido.requestFocus();
             flag = false; return flag;
         }
         
         //PARA EL SEGUNDO APELLIDO 

         
         else if((!utils.verificarString(tSapellido.getText()))&&(!tSnombre.getText().isEmpty())){
             JOptionPane.showMessageDialog(null, "Segundo Apellido no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tSapellido);tSapellido.requestFocus();
             flag = false; return flag;
         }
         
         //PARA LA DIRECCION
         
          else if(utils.verificarEspacioVacio(tDireccion.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Dirección",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tDireccion);tDireccion.requestFocus();
             flag = false; return flag;
         }
          
          //PARA LA ZONA DE PARCELA
         
        else if(utils.verificarEspacioVacio(tZonaParcela.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Número de Parcela",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tZonaParcela);tZonaParcela.requestFocus();
             flag = false; return flag;
         }
          
         else if(!utils.verificarString(tZonaParcela.getText())){
             JOptionPane.showMessageDialog(null, "Zona de Parcela no debe contener Números",
                        "ERROR!",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tZonaParcela);tZonaParcela.requestFocus();
             flag = false; return flag;
         }
         
         
         
         //PARA EL NÚMERO DE PARCELA
         
         else if(utils.verificarEspacioVacio(tNumParcela.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Número de Parcela",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tNumParcela);tNumParcela.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarInteger(tNumParcela.getText())){
                      JOptionPane.showMessageDialog(null, "Número de Parcela no debe contener Letras",
                                     "ERROR!",
                                    JOptionPane.ERROR_MESSAGE);
                                    resaltadores.resaltadorJtextfield(tNumParcela);tNumParcela.requestFocus();
                                    flag = false; return flag;
         }
         
         //PARA EL HABITANTE DE PARCELA
         
         else if(utils.verificarEspacioVacio(tHabitParcela.getText())){
             JOptionPane.showMessageDialog(null, "Acaso está Vacío?",
                        "Error en Campo Habitante de Parcela",
                            JOptionPane.ERROR_MESSAGE);
                            resaltadores.resaltadorJtextfield(tHabitParcela);tHabitParcela.requestFocus();
             flag = false; return flag;
         }
         
         else if(!utils.verificarInteger(tHabitParcela.getText())){
                      JOptionPane.showMessageDialog(null, "Habitante de Parcela no debe contener Letras",
                                     "ERROR!",
                                    JOptionPane.ERROR_MESSAGE);
                                    resaltadores.resaltadorJtextfield(tHabitParcela);tHabitParcela.requestFocus();
                                    flag = false; return flag;
         }
         
         
         //PARA EL TELÉFONO
         
         if(utils.verificarEspacioVacio(tTelefono.getText()))
         {
           
           int confirmado = JOptionPane.showConfirmDialog(null, "Seguro que desea agregar el Usuario sin Teléfono?");
                     if (JOptionPane.NO_OPTION == confirmado){
                         flag =false; 
                         tTelefono.requestFocus();
                         return flag;
                         
                     }   
               
         }
         
        else if(tTelefono.getText().length()!=8){
                     JOptionPane.showMessageDialog(null, "Teléfono debe tener 8 Dígitos: Cod de Ciudad y Teléfono",
                     "ERROR!",
                      JOptionPane.ERROR_MESSAGE);
                      resaltadores.resaltadorJtextfield(tTelefono);tTelefono.requestFocus();
                      flag = false; return flag;
                      }

        else if(!utils.verificarInteger(tTelefono.getText())){
                      JOptionPane.showMessageDialog(null, "Teléfono no debe contener Letras",
                                     "ERROR!",
                                    JOptionPane.ERROR_MESSAGE);
                                    resaltadores.resaltadorJtextfield(tTelefono);tTelefono.requestFocus();
                                    flag = false; return flag;
                                    }
      
         
         //PARA EL CELULAR
         
         if(utils.verificarEspacioVacio(tCelular.getText()))
         {
           
           int confirmado = JOptionPane.showConfirmDialog(null, "Seguro que desea agregar el Usuario sin Celular?");
                     if (JOptionPane.NO_OPTION == confirmado){
                         flag =false;
                         tCelular.requestFocus();
                         return flag;
                     }   
               
         }
         
        else if(tCelular.getText().length()!=9){
                     JOptionPane.showMessageDialog(null, "TCelular debe tener 9 Dígitos",
                     "ERROR!",
                      JOptionPane.ERROR_MESSAGE);
                      resaltadores.resaltadorJtextfield(tCelular);tCelular.requestFocus();
                      flag = false; return flag;
                      }

        else if(!utils.verificarInteger(tCelular.getText())){
                      JOptionPane.showMessageDialog(null, "Celular no debe contener Letras",
                                     "ERROR!",
                                    JOptionPane.ERROR_MESSAGE);
                                    resaltadores.resaltadorJtextfield(tCelular);tCelular.requestFocus();
                                    flag = false; return flag;
                                    }
        
        
        //PARA LA FOTO
        
         else if(cambioImagen==false)
         {
             int confirmado = JOptionPane.showConfirmDialog(null, "Seguro que desea agregar el Usuario sin foto?");
                     if (JOptionPane.NO_OPTION == confirmado){flag =false; this.bFoto.requestFocus();return flag;}
         }
             
         
         return flag;
     }

     public  void cerrar()
     {
         utils.ocultarVentana(identidad);
         utils.mostrarVentana(padre);

     }
     
     public void limpiar(){
     
         tDni.setText("");
         tPnombre.setText("");
         tSnombre.setText("");
         tPapellido.setText("");
         tSapellido.setText("");
         tDireccion.setText("");
         tTelefono.setText("");
         tCelular.setText("");
         
     }
     
     public void crearAgregarUsuario(){/*ARREGLARRRRRRR*/
         
     cliente = new cCliente(
                    tDni.getText(), 
                    tPnombre.getText(), 
                    tSnombre.getText(), 
                    tPapellido.getText(), 
                    tSapellido.getText(), 
                    tDireccion.getText(),
                    tZonaParcela.getText(),
                    Integer.parseInt(tNumParcela.getText()),
                    Integer.parseInt(tHabitParcela.getText()),
                    Integer.parseInt(tTelefono.getText()), 
                    Integer.parseInt(tCelular.getText()));
             
     if(!cliente.existeCliente()){
         
         
            if(cambioImagen==true)
             imagenUtils.guardarFoto("./fotosClientes/",imagen,cliente.getDni()+"C");

                if(cliente.agregarCliente()){ 
                    JOptionPane.showMessageDialog(null, "CLIENTE AGREGADO :D",
                            "Felicidades!",
                                JOptionPane.INFORMATION_MESSAGE);
                    this.setVisible(false);
                    try {
                        padre.actualizarData();
                    } catch (SQLException ex) {
                        Logger.getLogger(guiAgregarCliente.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(guiAgregarCliente.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    }
     }
     
     else{
         
     JOptionPane.showMessageDialog(null,"VERIFICA DNI, CELULAR O EL TF. FIJO!",
             "PARECE QUE EL CLIENTE YA EXISTE",
                                JOptionPane.ERROR_MESSAGE);  
     }
     
 }
     

     private void agregarListeners() 
     {
         
         //Listeneer Para Los TextFields
         
       tDni.addKeyListener(new resaltadores.resaltadorInteger(this.tDni));
       tDni.addFocusListener(new resaltadores.enfocador(this.tDni, true));
       
       tPnombre.addKeyListener(new resaltadores.resaltadorString(this.tPnombre));
       tPnombre.addFocusListener(new resaltadores.enfocador(this.tPnombre, true));
       
       tSnombre.addKeyListener(new resaltadores.resaltadorString(this.tSnombre));
       tSnombre.addFocusListener(new resaltadores.enfocador(this.tSnombre, true));
       
       tPapellido.addKeyListener(new resaltadores.resaltadorString(this.tPapellido));
       tPapellido.addFocusListener(new resaltadores.enfocador(this.tPapellido, true));
       
       tSapellido.addKeyListener(new resaltadores.resaltadorString(this.tSapellido));
       tSapellido.addFocusListener(new resaltadores.enfocador(this.tSapellido, true));
       
       tTelefono.addKeyListener(new resaltadores.resaltadorInteger(this.tDni));
       tTelefono.addFocusListener(new resaltadores.enfocador(this.tDni, true));
       
       tCelular.addKeyListener(new resaltadores.resaltadorInteger(this.tDni));
       tCelular.addFocusListener(new resaltadores.enfocador(this.tDni, true));
      
       
     
         
         
         //Listener Para Los Botones
       //LISTENER PARA EL BOTON ACEPTAR
         Action actEnter = new AbstractAction() {    
      
         public void actionPerformed(ActionEvent e) {
            bAceptar.doClick();}
          };
         
         bAceptar.addActionListener(new ActionListener() {

            
        public void actionPerformed(ActionEvent e) {
            if(revisarCampos()){crearAgregarUsuario();/*TODOOOOO*/}
        }
        });
        
         bAceptar.getInputMap(bAceptar.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ENTER"),"accion");
         bAceptar.getActionMap().put("accion", actEnter);
         
         //Listener del Boton Cancelar
         
         Action actEsc = new AbstractAction() { public void actionPerformed(ActionEvent e) {cerrar();}};
         
         bCancelar.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {cerrar();}});
        
         bCancelar.getInputMap(bCancelar.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"),"accion");
         bCancelar.getActionMap().put("accion", actEsc);
         
        //Listener del Boton de la Foto
         
         bFoto.addActionListener(new ActionListener() {

            
            public void actionPerformed(ActionEvent e) {
                selector.showOpenDialog(getParent());
                try{
                actualizarFoto(selector.getSelectedFile().getAbsoluteFile().toString());    
                }catch(NullPointerException exp){}
            }
        });
    }
     
        public void actualizarFoto(final String figura){
        
         try {
             imagen=new ImageIcon(figura); 
             if(imagenUtils.esImagenAdecuada(imagen)){
                
                bFoto.setIcon(imagen);
                identidad.pack();
                this.cambioImagen=true;
             }
             
             else{
                imagen=imagenUtils.escalaImagenGrande(imagen);
                bFoto.setIcon(imagen);
                identidad.pack();
                this.cambioImagen=true;
             }
         } catch (NullPointerException e) {
         }             
    }
        
        
     
}

